import { ref, computed } from 'vue'
import { defineStore } from 'pinia'

// 定义用户信息的接口类型（可根据实际情况扩展字段）
interface UserInfo {
  userId: string
  username: string
  token: string
}

export const useCounterStore = defineStore('counter', () => {
  // 用于存储用户信息的响应式数据，初始值可以设为空对象
  const userInfo = ref<UserInfo>({} as UserInfo)

  // 计数器相关的状态和操作，与之前保持一致
  const count = ref(0)
  const doubleCount = computed(() => count.value * 2)
  function increment() {
    count.value++
  }

  // 保存用户信息到localStorage的函数，包含token的存储
  function saveUserInfo(info: UserInfo) {
    userInfo.value = info
    localStorage.setItem('userInfo', JSON.stringify(info))
  }

  // 从localStorage中获取用户信息并设置到userInfo响应式数据中的函数
  function loadUserInfo() {
    const storedInfo = localStorage.getItem('userInfo')
    if (storedInfo) {
      userInfo.value = JSON.parse(storedInfo) as UserInfo
    }
  }

  // 清除用户信息的函数，同时从localStorage移除相关数据，包含token的清除
  function clearUserInfo() {
    userInfo.value = {} as UserInfo
    localStorage.removeItem('userInfo')
  }

  // 单独保存token到localStorage的函数
  function saveToken(token: string) {
    localStorage.setItem('token', token)
  }

  // 从localStorage中查询获取token的函数
  function getToken(): string | null {
    return localStorage.getItem('token')
  }

  // 删除localStorage中保存的token的函数
  function deleteToken() {
    localStorage.removeItem('token')
  }

  // 在模块初始化时，尝试加载用户信息
  loadUserInfo()

  return {
    count,
    doubleCount,
    increment,
    userInfo,
    saveUserInfo,
    loadUserInfo,
    clearUserInfo,
    saveToken,
    getToken,
    deleteToken
  }
})